﻿using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Maestro_Proveedores.evaluacionDeDesempeno.indicadores
{
    /// <remarks>
    /// <para>El indicador tiene como objetivo evaluar la calidad del proveedor de acuerdo al porcentaje de reclamos satisfactoriamente atendidos, dentro del tiempo prudente establecido para tal fin.</para>
    /// <para>NRS / NTR= (Número de Reclamos Satisfactoriamente Atendidos / Número total de Reclamos) * 100</para>
    /// </remarks>
    class ReclamosAtendidos : Indicador
    {
        private _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_RECLAMOTableAdapter pRV_RECLAMOTableAdapter=null;
        /// <summary>
        /// Cuando se crea una nueva instancia del indicador, se incializan todas sus variables y propiedades. Tanto las propias como las herededas de la calse Indicador
        /// </summary>
        public ReclamosAtendidos()
        {
            //--- al tener un ponderado de cero (0%) este indicador no tendra efecto alguno sobre la evaluacion de desempeño, esto se hizo por solicitud de la TN Moreno
            this.Peso = 0.12;
            //--- al igual que con el peso, al no tener definido un tipo, este indicador no sera tenido en cuenta paar llevar a cabo la evaluacion de desempeño
            this.TipoIndicador = Enums.TipoIndicador.Bien;
            this.pRV_RECLAMOTableAdapter = new _Maestro_Proveedores_CORPORATIVADataSetTableAdapters.PRV_RECLAMOTableAdapter();
        }
        /// <summary>
        /// Redefinicion del metodo toString()
        /// </summary>
        /// <returns>Nombre Completo del presente indicador</returns>
        public override string ToString()
        {
            return "Reclamos Satisfactoriamente Atendidos";
        }
        /// <summary>
        /// redefinición del metodo Calcular(), declarado en la clase padre Indicador como un metodo abstracto (se debe redefinir obligatoriamente en cualquier clase que herede de la clase Indicador)
        /// </summary>
        /// <returns></returns>
        protected override bool calcular()
        {
            float totalReclamos = 0;
            float totalReclamosAtend = 0;

            string temp = this.pRV_RECLAMOTableAdapter.Scalar_COUNT_reclamos(this.registroProveedor.id_proveedor, this.FechaInferior, this.FechaSuperior).ToString();

            if (temp.Equals(string.Empty))
            {
                totalReclamos = 0;
            }
            else
            {
                totalReclamos = float.Parse(temp);
            }

            temp = this.pRV_RECLAMOTableAdapter.Scalar_COUNT_reclamosAtendidos(this.registroProveedor.id_proveedor, this.FechaInferior, this.FechaSuperior).ToString();

            if (temp.Equals(string.Empty))
            {
                totalReclamosAtend = 0;
            }
            else
            {
                totalReclamosAtend = float.Parse(temp);
            }

            //---si no presenta reclamos obtiene una calificion excelenete en este indicador
            if (totalReclamos.Equals(0))
            {
                this.Resultado = 100;
                this.PorcentajeEvaluacion = 100;
                return true;
            }

            //--- Guardo el resultado del indicador
            this.Resultado = (totalReclamosAtend / totalReclamos) * 100;

            //--- aqui se determina el puntaje final del proveedor en este indice, para mayor informacion consultar el proyecto: DISEÑO E IMPLEMENTACIÓN DEL PROCESO DE CALIFICACIÓN,EVALUACIÓN, DESARROLLO Y CERTIFICACIÓN DE PROVEEDORES DE COTECMAR

            if (this.registroProveedor.grupo_servicio.Contains("B -") && Resultado > 96)
            {
                this.PorcentajeEvaluacion = 100;
            }
            else if (!this.registroProveedor.grupo_servicio.Contains("B -") && Resultado > 99)
            {
                this.PorcentajeEvaluacion = 100;
            }
            else if (this.registroProveedor.grupo_servicio.Contains("B -") && Resultado > 89)
            {
                this.PorcentajeEvaluacion = 75;
            }
            else if (!this.registroProveedor.grupo_servicio.Contains("B -") && Resultado > 84)
            {
                this.PorcentajeEvaluacion = 75;
            }
            else if (Resultado > 69)
            {
                this.PorcentajeEvaluacion = 50;
            }
            else
            {
                this.PorcentajeEvaluacion = 25;
            }

            return true;
        }

    }
}